Promises এবং Error Handling হল JavaScript এর দুটি গুরুত্বপূর্ণ ধারণা, যা অ্যাসিনক্রোনাস প্রোগ্রামিং ও ত্রুটি পরিচালনায় সাহায্য করে। এগুলি প্রোগ্রামিংয়ের মধ্যে সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস কার্যকলাপের মধ্যে একটি সুসংগঠিত সমন্বয় নিশ্চিত করে এবং ডেভেলপারদের উন্নত মানের কোড লিখতে সহায়তা করে।
১. Promises
Promises হল অ্যাসিনক্রোনাস অপারেশনের ফলাফল যেটি ভবিষ্যতে কোনো সময় পাওয়া যাবে। একটি promise একটি ফলাফলকে তিনটি অবস্থার মধ্যে রাখে:
- Pending: Promise তৈরি করা হয়েছে, কিন্তু ফলাফল এখনো পাওয়া যায়নি।
- Resolved (Fulfilled): Promise সফলভাবে সম্পন্ন হয়েছে এবং একটি মান (value) ফিরিয়েছে।
- Rejected: Promise ব্যর্থ হয়েছে এবং একটি ত্রুটি (error) ফিরিয়েছে।
Promise একটি অবজেক্ট হিসেবে রিটার্ন হয় যা অ্যাসিনক্রোনাস কাজের ফলাফল সংরক্ষণ করে এবং পরে .then() বা .catch() মেথডের মাধ্যমে সে ফলাফল বা ত্রুটি ব্যবস্থাপনা করা যায়।
Promise তৈরি করা:
// একটি promise তৈরি করা
let promise = new Promise((resolve, reject) => {
let success = true; // এখানে success কে false করলে promise reject হবে
if (success) {
resolve("Operation successful!"); // Promise সফল হলে
} else {
reject("Operation failed!"); // Promise ব্যর্থ হলে
}
});Promise ব্যবহার করা:
.then(): Promise সফল হলে.then()মেথড ব্যবহার করা হয়।.catch(): Promise ব্যর্থ হলে.catch()মেথড ব্যবহার করা হয়।
promise
.then((message) => {
console.log(message); // "Operation successful!"
})
.catch((error) => {
console.log(error); // "Operation failed!"
});Promise Chain:
একটি promise এর উপর আরেকটি promise চেইন করা যেতে পারে। এটি সিরিয়াল অ্যাসিনক্রোনাস কাজগুলো সম্পন্ন করতে ব্যবহৃত হয়।
let promise1 = new Promise((resolve) => {
resolve("First step done");
});
promise1
.then((message) => {
console.log(message);
return "Second step done"; // পরবর্তী promise রিটার্ন
})
.then((message) => {
console.log(message); // "Second step done"
return "Third step done"; // পরবর্তী promise রিটার্ন
})
.then((message) => {
console.log(message); // "Third step done"
})
.catch((error) => {
console.log("Error:", error); // যদি কোনো ত্রুটি ঘটে
});২. Error Handling in Promises
Error Handling হল অ্যাসিনক্রোনাস কোডে ত্রুটির সঠিকভাবে চিহ্নিত করা এবং তার জন্য প্রতিক্রিয়া দেওয়া। JavaScript এ, Promise ব্যবহারের সময় .catch() মেথড দিয়ে ত্রুটি পরিচালনা করা যায়।
Error Handling উদাহরণ:
let promise = new Promise((resolve, reject) => {
let success = false; // আমরা ইচ্ছাকৃতভাবে fail করছি
if (success) {
resolve("Task completed successfully");
} else {
reject("An error occurred");
}
});
promise
.then((message) => {
console.log(message); // যদি promise সফল হয়
})
.catch((error) => {
console.log("Caught error:", error); // যদি promise ব্যর্থ হয়
});এখানে, success যদি false থাকে তবে Promise reject হবে এবং .catch() মেথডে ত্রুটি ধরা হবে।
Async/Await এর সাথে Error Handling
async এবং await হল নতুন সিনট্যাক্স, যা promises এর কাজকে আরও সোজা এবং সুন্দর করে তোলে। await এর মাধ্যমে আপনি Promise এর ফলাফল সরাসরি অ্যাসিঙ্ক্রোনাসভাবে গ্রহণ করতে পারেন এবং try...catch দিয়ে ত্রুটি পরিচালনা করা হয়।
উদাহরণ: Async/Await Error Handling
// একটি অ্যাসিনক্রোনাস ফাংশন তৈরি করা
async function fetchData() {
try {
let result = await new Promise((resolve, reject) => {
let success = false; // ইচ্ছাকৃতভাবে fail করছি
if (success) {
resolve("Data fetched successfully");
} else {
reject("Failed to fetch data");
}
});
console.log(result); // যদি promise সফল হয়
} catch (error) {
console.log("Caught error:", error); // যদি promise ব্যর্থ হয়
}
}
fetchData();এখানে, async ফাংশনের মধ্যে await ব্যবহার করে Promise এর ফলাফল নেওয়া হয়েছে এবং try...catch দিয়ে ত্রুটি পরিচালনা করা হয়েছে।
৩. Promise.all() এবং Promise.race()
Promise.all()
Promise.all() একাধিক Promise কে একসাথে চালানোর জন্য ব্যবহার করা হয়। এটি একটি অ্যারে নেয় এবং সব Promise সফল হলে, একটি array হিসেবে রেজাল্ট ফেরত দেয়। যদি কোনো একটি Promise ব্যর্থ হয়, তবে পুরো অ্যারে reject হয়ে যাবে।
let promise1 = new Promise((resolve) => resolve("First"));
let promise2 = new Promise((resolve) => resolve("Second"));
let promise3 = new Promise((resolve, reject) => reject("Error"));
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // ["First", "Second", "Error"]
})
.catch((error) => {
console.log("Error:", error); // "Error"
});Promise.race()
Promise.race() একাধিক Promise নিলেও, প্রথম Promise যেটি সফল বা ব্যর্থ হবে, তার ফলাফল রিটার্ন করবে।
let promise1 = new Promise((resolve) => setTimeout(resolve, 100, "First"));
let promise2 = new Promise((resolve) => setTimeout(resolve, 50, "Second"));
Promise.race([promise1, promise2])
.then((result) => {
console.log(result); // "Second" (কারণ এটি আগে রেজাল্ট ফেরত দিয়েছে)
})
.catch((error) => {
console.log("Error:", error);
});সারাংশ
- Promises হল অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ উপাদান, যা কাজের ফলাফল বা ত্রুটি ভবিষ্যতে পাওয়া যাবে এমন আশ্বাস প্রদান করে।
- Promise এর তিনটি স্টেট রয়েছে:
pending,resolved, এবংrejected। .then()এবং.catch()মেথড দিয়ে Promise এর ফলাফল এবং ত্রুটি পরিচালনা করা হয়।- Error Handling হল ত্রুটির সঠিকভাবে চিহ্নিত করা এবং সেই অনুযায়ী ব্যবস্থা নেওয়া।
- async/await সিমপ্লিফাইড অ্যাসিনক্রোনাস কোড লেখার জন্য ব্যবহৃত হয় এবং
try...catchদিয়ে ত্রুটি হ্যান্ডলিং করা হয়। - Promise.all() একাধিক promise কে একসাথে সম্পন্ন করতে ব্যবহৃত হয়, এবং Promise.race() প্রথমে সফল বা ব্যর্থ হওয়া promise এর ফলাফল নেয়।
Read more